package com.ms.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ms.entity.Organizer;
import com.ms.entity.Schedule;
import com.ms.service.inter.ScheduleService;
import com.ms.utils.SimpleTokenUtils;
import com.ms.utils.UserContext;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/schedule")
public class ScheduleController {

    @Autowired
    private ScheduleService scheduleService;

    /**
     * 查询所有赛程安排
     * @return 所有赛程列表
     */
    @GetMapping("/list")
    public List<Schedule> listAllSchedules() {
        return scheduleService.list();
    }

    /**
     * 根据ID查询赛程详情
     * @param id 赛程ID
     * @return 赛程详情
     */
    @GetMapping("/detail")
    public Schedule getScheduleById(@RequestParam Integer id) {
        return scheduleService.getById(id);
    }

    /**
     * 根据比赛ID查询所有赛程安排
     * @param gameId 比赛ID
     * @return 该比赛的所有赛程安排
     */
    @GetMapping("/listByGameId")
    public List<Schedule> listSchedulesByGameId(@RequestParam Integer gameId) {
        QueryWrapper<Schedule> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("gameID", gameId);
        System.out.println("、、、、、、、、、、、、、、、listByGameId、、、、、、、、、、、、、");
        return scheduleService.list(queryWrapper);
    }

    /**
     * 根据项目ID查询所有赛程安排
     * @param eventId 项目ID
     * @return 该项目的所有赛程安排
     */
    @GetMapping("/listByEventId")
    public List<Schedule> listSchedulesByEventId(@RequestParam Integer eventId) {
        QueryWrapper<Schedule> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("eventID", eventId);
        System.out.println("、、、、、、、、、、、、、、、listByEventId、、、、、、、、、、、、、");
        return scheduleService.list(queryWrapper);
    }

    /**
     * 根据主办方token获取该主办方的所有比赛赛程安排
     * @param request HTTP请求
     * @return 赛程列表
     */
    @GetMapping("/listByOrganizer")
    public List<Schedule> listSchedulesByOrganizer(HttpServletRequest request) {
        // 从请求头获取token
        String token = request.getHeader("token");
        if (token == null || token.isEmpty()) {
            throw new RuntimeException("未登录，请先登录");
        }

        // 从token中获取主办方信息
        Object userObj = SimpleTokenUtils.getUserByToken(token);
        if (!(userObj instanceof Organizer)) {
            throw new RuntimeException("无权限访问，仅主办方可以查看");
        }
        System.out.println("、、、、、、、、、、、、、、、listByOrganizer、、、、、、、、、、、、、");
        Organizer organizer = (Organizer) userObj;
        Integer organizerId = organizer.getOrId();

        // 查询该主办方的所有赛程安排
        return scheduleService.listSchedulesByOrganizerId(organizerId);
    }

    /**
     * 添加新的赛程安排
     * @param schedule 赛程对象
     * @return 添加结果
     */
    @PostMapping("/add")
    public boolean addSchedule(@RequestBody Schedule schedule) {
        // 检查是否是管理员或主办方
        if (UserContext.getManager() == null && UserContext.getOrganizer() == null) {
            throw new RuntimeException("请使用管理员或主办方账号登录");
        }

        // 设置创建时间
        schedule.setState("未开始");
        
        return scheduleService.save(schedule);
    }

    /**
     * 更新赛程信息
     * @param schedule 包含更新信息的赛程对象
     * @return 更新结果
     */
    @PutMapping("/update")
    public boolean updateSchedule(@RequestBody Schedule schedule) {
        // 检查是否是管理员或主办方
        if (UserContext.getManager() == null && UserContext.getOrganizer() == null) {
            throw new RuntimeException("请使用管理员或主办方账号登录");
        }

        return scheduleService.updateById(schedule);
    }

    /**
     * 删除赛程安排
     * @param id 赛程ID
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public boolean deleteSchedule(@RequestParam Integer id) {
        // 检查是否是管理员或主办方
        if (UserContext.getManager() == null && UserContext.getOrganizer() == null) {
            throw new RuntimeException("请使用管理员或主办方账号登录");
        }
        
        return scheduleService.removeById(id);
    }

    
}